package net.hn.hnms.biz.equipment.controller;


import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import net.hn.hnms.biz.equipment.domain.dto.HisDto;
import net.hn.hnms.biz.equipment.domain.dto.NowDto;
import net.hn.hnms.biz.equipment.domain.dto.PointDto;
import net.hn.hnms.biz.equipment.domain.vo.ChartDateVo;
import net.hn.hnms.biz.equipment.domain.vo.HisVo;
import net.hn.hnms.biz.equipment.domain.vo.NowVo;
import net.hn.hnms.biz.equipment.domain.vo.PointHistoryListVo;
import net.hn.hnms.biz.equipment.service.HoistingService;
import net.hn.hnms.biz.equipment.service.ShaftService;
import net.hn.hnms.sys.common.core.domain.R;
import net.hn.hnms.sys.common.core.domain.ResponsePage;
import net.hn.hnms.sys.common.mybatis.core.page.PageQuery;
import net.hn.hnms.sys.common.satoken.config.AutoSetMineCode;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 功能描述: 立井提升提升系统
 *
 */
@Api(value = "立井提升系统控制器", tags = {"立井提升系统"})
@RestController
@RequestMapping("/shaft")
public class ShaftController {

    @Resource
    private ShaftService shaftService;

    /**
     * 获取所属设备下拉列表
     * @return
     */
    @ApiOperation("获取所属设备下拉列表[斜井提升]")
    @GetMapping("/categoryList")
    @AutoSetMineCode
    public R inclineCategoryList(@ApiParam(value = "煤矿编码") String mineCode) {
        List<String> list = shaftService.getCategoryList(mineCode);
        return R.ok(list);
    }

    /**
     * 获取设备位置下拉列表[斜井提升]
     * @return
     */
    @ApiOperation("获取设备位置下拉列表[斜井提升]")
    @GetMapping("/deviceLocaltionList")
    @AutoSetMineCode
    public R inclineDeviceLocaltionList(@ApiParam(value = "煤矿编码") String mineCode) {
        List<String> list = shaftService.deviceLocaltionList(mineCode);
        return R.ok(list);
    }


    /**
     * * 分页条件查询实时数据
     * @param pageQuery
     * @param nowDTO
     * @return
     */
    @ApiOperation("分页条件查询实时数据")
    @GetMapping("pageNowList/pageList")
    @AutoSetMineCode
    public R<ResponsePage<NowVo>> pageNowList(PageQuery pageQuery, NowDto nowDTO) {
        ResponsePage<NowVo> list = shaftService.pageNowList(pageQuery, nowDTO);
        return R.ok(list);
    }


    @ApiOperation("条件查询历史数据测点曲线")
    @GetMapping("/pointHistoryCurve")
    @AutoSetMineCode
    public R<ChartDateVo> pointHistoryCurve(PointDto pointDto) {
        //开始时间  若为空默认为前6小时的日期 >=data_time
        if (pointDto.getStartTime() == null) {
            Calendar instance = Calendar.getInstance();
            instance.setTime(new Date());
            //日期减6小时
            instance.add(Calendar.HOUR_OF_DAY, -6);
            pointDto.setStartTime(instance.getTime());
        }
        if  (pointDto.getEndTime() == null) {
            pointDto.setEndTime(new Date());
        }
        if (pointDto.getEndTime().getTime() - pointDto.getStartTime().getTime() > (3600 * 24 * 31 * 1000L)) {
            //1月得数据
            return R.fail("请选择1月内时间范围");
        }
        ChartDateVo chartDateVo= shaftService.pointHistoryCurve(pointDto);
        return R.ok(chartDateVo);
    }

    @ApiOperation("条件查询历史数据测点列表")
    @GetMapping("/pointHistoryList")
    @AutoSetMineCode
    public R<List<PointHistoryListVo>> pointHistoryList(PointDto pointDto) {
        //开始时间  若为空默认为前6小时的日期 >=data_time
        if (pointDto.getStartTime() == null) {
            Calendar instance = Calendar.getInstance();
            instance.setTime(new Date());
            //日期减6小时
            instance.add(Calendar.HOUR_OF_DAY, -6);
            pointDto.setStartTime(instance.getTime());
        }
        if  (pointDto.getEndTime() == null) {
            pointDto.setEndTime(new Date());
        }
        if (pointDto.getEndTime().getTime() - pointDto.getStartTime().getTime() > (3600 * 24 * 31 * 1000L)) {
            //1月得数据
            return R.fail("请选择1月内时间范围");
        }
        List<PointHistoryListVo> list= shaftService.pointHistoryList(pointDto);
        return R.ok(list);
    }

    /**
     * * 分页条件查询历史数据
     * @param pageQuery
     * @param hisDTO
     * @return
     */
    @ApiOperation("分页条件查询历史数据[斜井提升]")
    @GetMapping("/pageHistoryInfo/pageList")
    @AutoSetMineCode
    public R<ResponsePage<HisVo>> inclineShaftPageHistoryInfo(PageQuery pageQuery, HisDto hisDTO) {
        ResponsePage<HisVo> page = shaftService.shaftPageHistoryInfo(pageQuery, hisDTO);
        return R.ok(page);
    }


}
